home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / pgp20src.zip / PGP.H < prev    next >
C/C++ Source or Header  |  1992-08-21  |  9KB  |  228 lines

  1. /*
  2.     Pretty Good(tm) Privacy - RSA public key cryptography for the masses
  3.     Written by Philip Zimmermann, Phil's Pretty Good(tm) Software.
  4.     Version 1.0 - 5 Jun 91, last revised 6 Jul 91 by PRZ
  5.  
  6.     This file defines the various formats, filenames, and general control
  7.     methods used by PGP, as well as a few global switches which control
  8.     the functioning of the driver code.
  9.  
  10. */
  11.  
  12. #include "usuals.h"
  13. #define KEYFRAGSIZE 8    /* # of bytes in key ID modulus fragment */
  14. #define SIZEOF_TIMESTAMP 4 /* 32-bit timestamp */
  15.  
  16. /* The maximum length of the file path for this system.  Varies on UNIX
  17.    systems */
  18.  
  19. #ifndef    MAX_PATH
  20. #ifdef MSDOS
  21. #define MAX_PATH    64
  22. #else
  23. #define MAX_PATH    256
  24. #endif
  25. #endif
  26.  
  27. #ifdef ATARI
  28. #define sizeof(x) (int)sizeof(x)
  29. #define fread(a,b,c,d)    ((int)fread(a,b,c,d))
  30. #endif
  31.  
  32. /*
  33. **********************************************************************
  34. */
  35.  
  36. /* Cipher Type Byte (CTB) definitions follow...*/
  37. #define CTB_DESIGNATOR 0x80
  38. #define is_ctb(c) (((c) & CTB_DESIGNATOR)==CTB_DESIGNATOR)
  39. #define CTB_TYPE_MASK 0x7c
  40. #define CTB_LLEN_MASK 0x03
  41.  
  42. /* "length of length" field of packet, in bytes (1, 2, 4, 8 bytes): */
  43. #define ctb_llength(ctb) ((int) 1 << (int) ((ctb) & CTB_LLEN_MASK))
  44.  
  45. #define is_ctb_type(ctb,type) (((ctb) & CTB_TYPE_MASK)==(4*type))
  46. #define CTB_BYTE(type,llen) (CTB_DESIGNATOR + (4*type) + llen)
  47.  
  48. #define CTB_PKE_TYPE 1            /* packet encrypted with RSA public key */
  49. #define CTB_SKE_TYPE 2            /* packet signed with RSA secret key */
  50. #define CTB_MD_TYPE 3            /* message digest packet */
  51. #define CTB_CERT_SECKEY_TYPE 5  /* secret key certificate */
  52. #define CTB_CERT_PUBKEY_TYPE 6  /* public key certificate */
  53. #define CTB_COMPRESSED_TYPE 8    /* compressed data packet */
  54. #define CTB_CKE_TYPE 9            /* conventional-key-encrypted data */
  55. #define    CTB_LITERAL_TYPE 10        /* raw data with filename and mode */
  56. #define CTB_KEYCTRL_TYPE 12        /* key control packet */
  57. #define CTB_USERID_TYPE 13        /* user id packet */
  58. #define CTB_COMMENT_TYPE 14        /* comment packet */
  59.  
  60. /* Unimplemented CTB packet types follow... */
  61. /* #define CTB_EXTENDED_TYPE 15 */ /* 2-byte CTB, 256 extra CTB types */
  62.  
  63. #define CTB_PKE CTB_BYTE(CTB_PKE_TYPE,1)
  64.     /* CTB_PKE len16 keyID mpi(RSA(CONKEYPKT)) */
  65.     /*      1         2     SIZE  countbytes()+2 */
  66. #define CTB_SKE CTB_BYTE(CTB_SKE_TYPE,1)
  67.     /* CTB_SKE len16 keyID mpi(RSA(MDPKT)) */
  68.     /*      1         2     SIZE  countbytes()+2 */
  69. #define CTB_MD CTB_BYTE(CTB_MD_TYPE,0)
  70.     /* CTB_MD len8 algorithm MD timestamp */
  71. #define CTB_CERT_SECKEY CTB_BYTE(CTB_CERT_SECKEY_TYPE,1)
  72.     /* CTB_CERT_SECKEY len16 timestamp userID mpi(n) mpi(e) mpi(d) mpi(p) mpi(q) mpi(u) crc16 */
  73. #define CTB_CERT_PUBKEY CTB_BYTE(CTB_CERT_PUBKEY_TYPE,1)
  74.     /* CTB_CERT_PUBKEY len16 timestamp userID mpi(n) mpi(e) crc16 */
  75.  
  76. #define CTB_KEYCTRL CTB_BYTE(CTB_KEYCTRL_TYPE,0)
  77. #define    CTB_USERID    CTB_BYTE(CTB_USERID_TYPE,0)
  78.  
  79. #define CTB_CKE CTB_BYTE(CTB_CKE_TYPE,3)
  80.     /*    CTB_CKE ciphertext */
  81.  
  82. #define CTB_LITERAL CTB_BYTE(CTB_LITERAL_TYPE,3)
  83.     /*    CTB_LITERAL data */
  84.  
  85. #define CTB_COMPRESSED CTB_BYTE(CTB_COMPRESSED_TYPE,3)
  86.     /*    CTB_COMPRESSED compressedtext */
  87.  
  88. /*    Public key encryption algorithm selector bytes. */
  89. #define RSA_ALGORITHM_BYTE    1    /*    use RSA    */
  90.  
  91. /*    Conventional encryption algorithm selector bytes. */
  92. #define IDEA_ALGORITHM_BYTE    1    /*    use the IDEA cipher */
  93.  
  94. /*    Message digest algorithm selector bytes. */
  95. #define MD5_ALGORITHM_BYTE 1    /* MD5 message digest algorithm */
  96.  
  97. /*    Data compression algorithm selector bytes. */
  98. #define ZIP2_ALGORITHM_BYTE  1    /* Zip-based deflate compression algorithm */
  99.  
  100. /* Signature classification bytes. */
  101. #define SB_SIGNATURE_BYTE    0x00    /* Signature of a binary msg or doc */
  102. #define SM_SIGNATURE_BYTE    0x01    /* Signature of canonical msg or doc */
  103. #define    K0_SIGNATURE_BYTE    0x10    /* Key certification, generic */
  104. #define    K1_SIGNATURE_BYTE    0x11    /* Key certification, persona */
  105. #define    K2_SIGNATURE_BYTE    0x12    /* Key certification, casual ID */
  106. #define    K3_SIGNATURE_BYTE    0x13    /* Key certification, positive ID */
  107. #define KC_SIGNATURE_BYTE    0x20    /* Key compromise */
  108. #define KR_SIGNATURE_BYTE    0x30    /* Key revocation */
  109. #define    TS_SIGNATURE_BYTE    0x40    /* Timestamp someone else's signature */
  110.  
  111. /* Public key encrypted data classification bytes. */
  112. #define MD_ENCRYPTED_BYTE    1    /* Message digest is encrypted */
  113. #define CK_ENCRYPTED_BYTE    2    /* Conventional key is encrypted */
  114.  
  115. /* Version byte for data structures created by this version of PGP */
  116. #define    VERSION_BYTE        2    /* PGP2 */
  117.  
  118. /* Values for trust bits in keycntrl packet after key packet */
  119. #define    KC_OWNERTRUST_MASK        0x07    /* Trust bits for key owner */
  120. #define    KC_OWNERTRUST_UNDEFINED    0x00
  121. #define    KC_OWNERTRUST_UNKNOWN    0x01
  122. #define    KC_OWNERTRUST_NEVER        0x02
  123. /* 2 levels reserved */
  124. #define    KC_OWNERTRUST_USUALLY    0x05
  125. #define    KC_OWNERTRUST_ALWAYS    0x06
  126. #define    KC_OWNERTRUST_ULTIMATE    0x07    /* Only for keys in secret ring */
  127. #define    KC_BUCKSTOP                0x80    /* This key is in secret ring */
  128. #define    KC_VISITED                0x40
  129.  
  130. /* Values for trust bits in keycntrl packet after userid packet */
  131. #define    KC_LEGIT_MASK            0x03    /* Key legit bits for key */
  132. #define    KC_LEGIT_UNKNOWN        0x00
  133. #define KC_LEGIT_UNTRUSTED        0x01
  134. #define KC_LEGIT_MARGINAL        0x02
  135. #define    KC_LEGIT_COMPLETE        0x03
  136. #define    KC_WARNONLY                0x80
  137.  
  138. /* Values for trust bits in keycntrl packet after signature packet */
  139. #define    KC_SIGTRUST_MASK        0x07    /* Trust bits for key owner */
  140. #define    KC_SIGTRUST_UNDEFINED    0x00
  141. #define    KC_SIGTRUST_UNKNOWN        0x01
  142. #define    KC_SIGTRUST_UNTRUSTED    0x02
  143. /* 2 levels reserved */
  144. #define    KC_SIGTRUST_MARGINAL    0x05
  145. #define    KC_SIGTRUST_COMPLETE    0x06
  146. #define    KC_SIGTRUST_ULTIMATE    0x07
  147. #define    KC_CONTIG                0x80    /* This sig is on a cert. path */
  148.  
  149. #define    MAINT_CHECK                0x01
  150. #define    MAINT_VERBOSE            0x02
  151. #define    MAINT_SILENT            0x04
  152.  
  153. #define is_secret_key(ctb) is_ctb_type(ctb,CTB_CERT_SECKEY_TYPE)
  154.  
  155. #define MAX_SIGCERT_LENGTH (1+2 + KEYFRAGSIZE + 2+MAX_BYTE_PRECISION)
  156.  
  157. #define MAX_KEYCERT_LENGTH (1+2+4+256 + 5*(2+MAX_BYTE_PRECISION))
  158.  
  159. /* Modes for CTB_LITERAL2 packet */
  160. #define    MODE_BINARY    'b'
  161. #define    MODE_TEXT    't'
  162.  
  163. /* Define CANONICAL_TEXT for any system which normally uses CRLF's
  164.    for text separators */
  165. #ifdef MSDOS
  166. #define    CANONICAL_TEXT
  167. #endif /* MSDOS */
  168.  
  169. /* Prototype for the 'more' function, which blorts a file to the screen with
  170.    page breaks, intelligent handling of line terminators, truncation of
  171.    overly long lines, and zapping of illegal chars.  Implemented in MORE.C */
  172.  
  173. int more_file(char *fileName);
  174.  
  175. /* Prototypes for the transport armor routines */
  176.  
  177. boolean is_armor_file(char *infile);
  178. int armor_file(char *infile, char *outfile, char *filename);
  179. int de_armor_file(char *infile, char *outfile, boolean *newname);
  180.  
  181. void exitPGP(int);
  182. void user_error();
  183.  
  184. /* Global filenames and system-wide file extensions... */
  185. extern char CTX_EXTENSION[];
  186. extern char PGP_EXTENSION[];
  187. extern char ASC_EXTENSION[];
  188. extern char SIG_EXTENSION[];
  189. extern char BAK_EXTENSION[];
  190. extern char SCRATCH_KEYRING_FILENAME[]; /* gets modified */
  191. extern char CONSOLE_FILENAME[];
  192. extern char SCRATCH_KEYRING_PATH[MAX_PATH];
  193. extern char rel_version[];
  194. extern char rel_date[];
  195.  
  196. /* These files use the environmental variable PGPPATH as a default path: */
  197. extern char PUBLIC_KEYRING_FILENAME[32];
  198. extern char SECRET_KEYRING_FILENAME[32];
  199. extern char RANDSEED_FILENAME[32];
  200.  
  201. /* Variables which are global across the driver code */
  202. extern boolean    filter_mode;
  203. extern FILE    *pgpout;    /* FILE structure for routine output */
  204.  
  205. /* Variables settable by config.pgp and referenced in config.c ... */
  206. extern char language[];    /* foreign language prefix code for language.pgp file */
  207. extern char charset[];
  208. /* my_name is substring of default userid for secret key to make signatures */
  209. extern char my_name[];
  210. extern char tmpdir[];    /* directory for temp files, usually RAMdisk */
  211. extern char floppyring[]; /* for comparing secret keys with backup on floppy */
  212. extern char lit_mode;    /* text or binary mode for literal packet */
  213. extern boolean emit_radix_64;
  214. extern boolean showpass;
  215. extern boolean keepctx;
  216. extern boolean verbose;    /* display maximum information */
  217. extern boolean compress_enabled;    /* attempt compression before encryption */
  218. extern long timeshift;    /* seconds from GMT timezone */
  219. extern int pem_lines;
  220. extern int marg_min;    /* number of marginally trusted signatures needed to
  221.                            make a key fully-legit */
  222. extern int compl_min;    /* number of fully trusted signatures needed */
  223. extern int max_cert_depth;
  224. extern char pager[];    /* file lister command */
  225.  
  226. extern char trust_lst[8][16];
  227.  
  228.